package com.i2bt.app.files;

import com.i2bt.common.AndroidRestContract;
import com.i2bt.common.Contract;
import com.i2bt.common.UserConfig;

import com.i2bt.R;
import com.i2bt.adapter.FilesMoveAdapter;
import com.i2bt.app.BaseActivity;
import com.i2bt.app.files.model.FilesMoveJsonHandle;
import com.i2bt.bean.FileBean;
import com.i2bt.bean.FileInfoBean;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import java.util.List;

/**
 * 
 * Title : 文件移动活动类
 *
 * Description : 选取将要把文件移动的路径
 *
 * CreatedTime : 2014-9-1
 *
 * @author wuliao & kakaxi & yi
 *
 * @version 1.0
 *
 */

public class FilesMoveActivity extends BaseActivity implements OnItemClickListener {
	
	private ListView filesMoveListView; // 文件移动列表视图
	
	private FilesMoveAdapter filesMoveAdapter; // 文件移动列表适配器 
	
	private List<FileInfoBean> filesPathData; // 文件移动里的路径数据
	
	private TextView filesMovePathText; // 文件移动路径文本视图
	
	private Button filesMoveBtn; // 文件移动确认按钮
	
	private FilesMoveJsonHandle filesMoveJsonHandle; // 文件移动json处理器
	
	private String[] previousPaths; // 从main活动传递过来的准备移动文件的路径
	
	private String moveCurrentPath; // 文件移动当前的路径
	
	private String moveAtHomeboxId;// 标记在哪个homebox中移动
	
	private String moveNextPath; // 下一层路径, 准备替换当前路径的
	
	private String movePreviousPath; // 上一层路径
	
	private boolean isBack; // 是否做返回操作
	
	private int moveCurrentPathAt; // 当前路径计数
	
	private int markPosition; // 点击文件夹位置标记
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_files_move);
		
		logic();
		initView();
	}
	
	@Override
	protected void logic() {
		// 初始化参数
		isBack = false;
		moveCurrentPathAt = 0;
		moveAtHomeboxId = UserConfig.homeboxId;
		
		if (filesMoveJsonHandle == null) {
			filesMoveJsonHandle = new FilesMoveJsonHandle(this);
		}
		
		// 初始化当前的目录位置
		moveCurrentPath = moveAtHomeboxId;
		
		// 初始化移动路径
		getFilesRequest();
		
	}

	@Override
	protected void initView() {
		// 初始化移动文件列表
		filesMoveAdapter = new FilesMoveAdapter(this, filesPathData);
		filesMoveListView = (ListView) findViewById(R.id.files_move_list);
		filesMoveListView.setAdapter(filesMoveAdapter);
		filesMoveListView.setOnItemClickListener(this);
		
		// 初始化移动文件父路径定位文本
		filesMovePathText = (TextView) findViewById(R.id.files_move_text);
		filesMovePathText.setText(moveCurrentPath);
		
		// 初始化确定移动按钮
		filesMoveBtn = (Button) findViewById(R.id.files_moved_btn);
		filesMoveBtn.setOnClickListener(this);
	}
	
	@Override
	public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
		
		// 点击设置前进, 标记点击位置, 请求获取文件信息
		isBack = false;
		markPosition = position;
		getFilesRequest();
		
	}
	
	@Override
	public void onClick(View v) {
		moveFilesRequest();
	}

	/**
	 * 获取移动文件夹路径请求
	 */
	private void getFilesRequest() {
		
		String parentFolder = "";
		// 初始化下一层路径
		if (isBack) {
			
			// 初始化上一层
			movePreviousPath = "";
			// 分隔符位置
			int spIndex = moveCurrentPath.lastIndexOf(Contract.SP);
			// 截取上一层路径
			movePreviousPath = moveCurrentPath.substring(0, spIndex);
			// 合并上一层路劲
			parentFolder = moveAtHomeboxId + movePreviousPath;
			
		}
		else {
			
			// 初始化下一层路径
			moveNextPath = "";
			// 当文件移动数据不为空时就会构造出路径, 文件数据为空就会做获取首目录操作
			if (filesPathData != null) {
				// 组装路径
				FileInfoBean fileInfoBean = filesPathData.get(markPosition);
				String fileName = fileInfoBean.getFileName();
				moveNextPath += moveCurrentPath + Contract.SP + fileName;
			}
			// 合并下一层路径
			parentFolder = moveAtHomeboxId + moveNextPath;
			
		}

		// 构造文件获取bean
		FileBean fileBean = new FileBean();
		fileBean.setAct(AndroidRestContract.GET_FILES);
		fileBean.setParentFolder(parentFolder);
		
		// 调用获取文件路径
		filesMoveJsonHandle.postTo(AndroidRestContract.REST_FILES, fileBean);
	}
	
	/**
	 * 获取移动文件路径响应
	 * @param filesMoveData 文件路径数据
	 */
	public void getFilesResponse(List<FileInfoBean> filesMoveData) {
		
		if (isBack) {
			// 回到上一层路径
			moveCurrentPath = movePreviousPath;
			// 路径计数减1
			moveCurrentPathAt--;
		}
		else {
			// 进入下一层
			moveCurrentPath = moveNextPath;
			// 路径计数加1
			moveCurrentPathAt++;
		}
		
		// 设置新的目录数据
		this.filesPathData = filesMoveData;
		filesMoveAdapter.setData(this.filesPathData);
		filesMovePathText.setText(moveCurrentPath);
	}
	
	/**
	 * 移动文件请求
	 */
	private void moveFilesRequest() {
		
		if (moveCurrentPathAt <= 1) {
			toastHandler("不能把文件移动到硬盘目录中!");
			return;
		}
		
		// 获取准备移动的旧路径列表
		previousPaths = getIntent().getStringArrayExtra(
				Contract.BUNDLE_FILES_MOVE_PREPATH_LIST);
		
		// 构造移动文件的bean
		FileBean fileBean = new FileBean();
		fileBean.setAct(AndroidRestContract.MOVE_FILES);
		fileBean.setPreviousPaths(previousPaths);
		fileBean.setNewPath(UserConfig.homeboxId + moveCurrentPath);
		
		// 调用移动文件请求
		filesMoveJsonHandle.postTo(AndroidRestContract.REST_FILES, fileBean);
	}
	
	/**
	 * 移动文件响应
	 */
	public void moveFilesResponse() {
		toastHandler("移动成功!");
		setResult(RESULT_OK);
		finish();
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		setActionBarBack(Contract.TITLE_FILE_MOVE_NAME);
		return super.onCreateOptionsMenu(menu);
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// 按回退键
		if (KeyEvent.KEYCODE_BACK == keyCode) {
			
			// 如果当前路径不是首目录的话就是回退, 如果是的话就关闭
			if (moveCurrentPathAt > 1) {
				isBack = true;
				getFilesRequest();
			}
			else {
				finish();
			}
			
		}
		
		return true;
	}
	
	@Override
	public void backHomeOperate() {
		finish();
	}
}
